class Solution {
public:
    vector<vector<int>> levelOrder(TreeNode* root) {
        if (root == nullptr)
            return {};
        vector<vector<int>> retnums;
        queue<TreeNode*> q1;
        q1.push(root);
        int size = q1.size();
        bool flag = 0;
        while (!q1.empty())
        {
            vector<int> nums;
            for (int i = 0; i < size; ++i)
            {
                nums.push_back(q1.front()->val);
                if (q1.front()->left)
                    q1.push(q1.front()->left);
                if (q1.front()->right)
                    q1.push(q1.front()->right);
                q1.pop();
            }
            if (flag)
                reverse(nums.begin(), nums.end());
            retnums.push_back(nums);
            flag = !flag;
            size = q1.size();
        }
        return retnums;
    }
};